﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Picdownload
{
    class KeyTreeNode
    {
        // 指向包含整数下一个的结点的指针
        public KeyTreeNode[] pointers = new KeyTreeNode[10];
        // 结束位标志，如果为true，表示当前结点为整数的最后一位
        public bool[] endFlag = new bool[10];
    }
    class KeyTree
    {
        private KeyTreeNode rootNode = new KeyTreeNode(); // 根结点
        // 向键树中添加一个无符号整数
        public void add(uint n)
        {
            string s = n.ToString();
            KeyTreeNode tempNode = rootNode;
            int index = 0;
            for (int i = 0; i < s.Length; i++)
            {
                index = int.Parse(s[i].ToString()); // 获得整数每一位的值
                if (i == s.Length - 1) // 在整数的最后一位时，将结束位设为true
                {
                    tempNode.endFlag[index] = true;
                    break;
                }
                if (tempNode.pointers[index] == null) // 当下一个结点的指针为空时，新建立一个结点对象
                    tempNode.pointers[index] = new KeyTreeNode();
                tempNode = tempNode.pointers[index];
            }
        }
        // 判断一个整数是否存在
        public bool exists(uint n)
        {
            string s = n.ToString();
            KeyTreeNode tempNode = rootNode;
            int index = 0;
            for (int i = 0; i < s.Length; i++)
            {
                if (tempNode != null)
                {
                    index = int.Parse(s[i].ToString());
                    // 当整数的最后一位的结束标志为true时，表示n存在
                    if ((i == s.Length - 1) && (tempNode.endFlag[index] == true))
                        return true;
                    else
                        tempNode = tempNode.pointers[index];
                }
                else
                    return false;
            }
            return false;
        }
    }
}
